﻿using UtfprLibrary.Windows.Forms.ComponentModel;

namespace UtfprLibrary.Windows.Forms {
    /// <summary>
    /// A fluent interface that expose and simplifies the setup of the library.
    /// </summary>
    public interface IUtfprConfiguration {
        /// <summary>
        /// Expose a setup for the default Splash form intended to be used by the system.
        /// </summary>
        /// <typeparam name="T">Type of the Splash form that will be automatically 
        /// instanciated by the library.</typeparam>
        IUtfprConfiguration SetFormSplash<T>() where T : UtfprFormSplashBase;
        /// <summary>
        /// Expose a setup for the default Login form intended to be used by the system.
        /// </summary>
        /// <typeparam name="T">Type of the Login form that will be automatically 
        /// instanciated by the library.</typeparam>
        IUtfprConfiguration SetFormLogin<T>() where T : UtfprFormLoginBase;
        /// <summary>
        /// Expose a setup for the default Main form intended to be used by the system.
        /// </summary>
        /// <typeparam name="T">Type of the Main form that will be automatically 
        /// instanciated by the library.</typeparam>
        IUtfprConfiguration SetFormMain<T>() where T : UtfprFormMainBase;
        /// <summary>
        /// TODO
        /// </summary>
        /// <typeparam name="T">TODO.</typeparam>
        IUtfprConfiguration SetUtfprBindingNavigatorIcons<T>() where T : UtfprBindingNavigatorBaseIcons;
        /// <summary>
        /// Used to disable the default Login form.
        /// </summary>
        IUtfprConfiguration DisableLogin();
        /// <summary>
        /// Used to disable the default Splash form.
        /// </summary>
        IUtfprConfiguration DisableSplash();
        /// <summary>
        /// Used to capture and display UtfprException messages via MessageDialog.
        /// </summary>
        IUtfprConfiguration IsInDebugMode();
    }
}
